#!/bin/bash

# SQLite 数据库导出重建脚本
# 用途：通过导出SQL并重建来减小数据库文件大小

# 检查参数
if [ "$#" -ne 1 ]; then
    echo "使用方法: $0 数据库文件名"
    exit 1
fi

DB_FILE="$1"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
BACKUP_FILE="${DB_FILE}.backup_${TIMESTAMP}"
SQL_FILE="${DB_FILE}.export_${TIMESTAMP}.sql"
NEW_DB_FILE="${DB_FILE}.new"

# 1. 备份原数据库文件
echo "正在备份原数据库文件..."
cp "$DB_FILE" "$BACKUP_FILE"
echo "备份已创建: $BACKUP_FILE"

# 2. 导出数据库内容到SQL文件
echo "正在导出数据库内容到SQL文件..."
sqlite3 "$DB_FILE" .dump > "$SQL_FILE"
echo "SQL导出已完成: $SQL_FILE"

# 3. 创建新数据库并导入数据
echo "正在创建新数据库并导入数据..."
sqlite3 "$NEW_DB_FILE" < "$SQL_FILE"
echo "新数据库已创建: $NEW_DB_FILE"

# 4. 检查新旧数据库大小
OLD_SIZE=$(du -h "$DB_FILE" | cut -f1)
NEW_SIZE=$(du -h "$NEW_DB_FILE" | cut -f1)

echo ""
echo "操作完成!"
echo "原数据库大小: $OLD_SIZE"
echo "新数据库大小: $NEW_SIZE"
echo ""

# 5. 询问是否替换原数据库
read -p "是否要用新数据库替换原数据库? [y/N] " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
    mv "$NEW_DB_FILE" "$DB_FILE"
    echo "原数据库已被新数据库替换"
else
    echo "保留了原数据库，新数据库保存在: $NEW_DB_FILE"
fi
